/**
 * Copyright (c) 2014-2016 www.nryuncang.com. All Rights Reserved.
 */
package com.topisv.tms.service.prioritySend;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.topisv.tms.entity.OrderBackTask;
import com.topisv.tms.entity.interfacetask.InterfaceTask;
import com.topisv.tms.entity.interfacetask.InterfaceTaskEnum;
import com.topisv.tms.repository.prioritySend.OrderBackTaskDao;
import com.topisv.tms.service.base.BaseService;

/**
 * 天天订单回传接口任务
 *
 * @author <a href=mailto:zhangweize@nryuncang.com>zhangweize</a>
 * @version 1.0.0
 */
@Component
public class OrderBackTaskService extends BaseService {
	@Autowired
	private OrderBackTaskDao taskDao;

	@Transactional
	public void saveTask(OrderBackTask task) {
		taskDao.save(task);
	}

	/**
	 * 锁定任务
	 * 
	 * @param node
	 *            节点
	 * @param type
	 *            任务类型
	 * @param status
	 *            任务状态
	 * @param maxRows
	 *            最大行数
	 * @return affected rows
	 */
	@Transactional
	public int lockTask(String node, String status, int maxRows) {
		return taskDao.lockTask(node, status, maxRows);
	}

	/**
	 * 查找需要处理的任务
	 * 
	 * @param status
	 *            任务状态, should be 'READY' or ('ERROR' AND retryTimes<n)
	 * @param node
	 *            分片节点
	 * @param retryTimes
	 *            尝试次数
	 * @param maxRows
	 *            最大结果集
	 * @return 任务集合
	 */
	@Transactional
	public List<OrderBackTask> findTask(String status, String node, int retryTimes, int maxRows) {
		return taskDao.queryTask(status, node, retryTimes, new PageRequest(0, maxRows)).getContent();
	}

	/**
	 * 查看指定任务是否已处理
	 * 
	 * @param taskId
	 * @return 是否已处理
	 */
	public boolean findIfProcessed(Long taskId) {
		long cnt = taskDao.countNotProcess(taskId, InterfaceTaskEnum.STATUS_READY);
		return cnt == 1l ? false : true;
	}
}
